package com.guo.dms.common.shiro.utils.factory;


import java.util.LinkedHashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.guo.dms.common.menu.dao.MenuDao;
import com.guo.dms.common.menu.entity.Menu;
@Component("filterChainDefinitionMapBuilder")
public class FilterChainDefinitionMapBuilder {
	
	@Autowired
	private MenuDao menuDao;
	
	/**
	 *  		<!-- 如果某个资源允许访问， 直接匹配成anon 即可 -->
                <!--  /rest/user/* = anon  -->  
                <!-- 如果某个资源需要认证，且要有相应的角色，可以直接如下设置，可以设置多个角色用逗号隔开,  有可以设置权限控制 -->   
                <!--  也是使用注解来实现， 具体见 UserController 类 -->     
                <!-- /user/admin = authc ,roles[admin]  ,perms[user:create]      -->    
                <!--  /rest/user/admin = authc ,perms[user:create] -->
                <!-- 其他资源需要认证  ，需要认证的资源 匹配成 authc-->   
	 * @return
	 */
	public LinkedHashMap<String, String> buildFilterChainDefinitionMap(){
		LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
		map.put("/resources/**", "anon"); 
		map.put("/login", "anon"); 
		map.put("/logout", "logout");
		map.put("/user/", "authc");
		///sys/permission/**=perms[sys-permission]
		// map.put("/sys/menu/**", "perms[sys-menu]");
		// map.put("p4/**", "perms[sys-test]");  
		/* map.put("/syst/", "syst");*/
	 	 // map.put("/sys/permission/**", "perms[sys-permission]");  
		 this.initMenuPermissions(map);
		  map.put("/", "perms[use]");
		map.put("/**", "authc");
		return map;
	}
	
	/**
	 * 将数据库中menu的权限列表加载到 shiroFilter的列表里
	 * @param map
	 * @return
	 */
	private LinkedHashMap<String, String> initMenuPermissions(LinkedHashMap<String, String> map){
		 List<Menu> menus = menuDao.selectAllMenus();
		for (Menu menu : menus) {
			String permission=menu.getPermission();
			String href=menu.getHref();
			 
			if( permission !=null && !permission.equals("") && href !=null && !href.equals("") && !href.equals("#")){
				char lastChar=href.charAt(href.length()-1);
				 if(!(lastChar+"").equals("/") ){
					 map.put(href+"/", "perms["+permission+"]");
					 map.put(href, "perms["+permission+"]");
				} else{
					 String hf=href.substring(0,href.length()-1);
					 map.put( hf, "perms["+permission+"]");
					 map.put(href, "perms["+permission+"]");
				}
				 
			}
		} 
		System.err.println("Permission inited by menus ");
		return map;
	}
}
